Association Rules atau sering juga disebut dengan Market Basket Analysis (MBA) merupakan kegiatan mencari aturan (rules) asosiasi yang menunjukkan hubungan antar item dalam sebuah transaksi. Misalnya, ketika seseorang membeli roti, maka orang itu cenderung akan membeli selai juga. Misalnya lagi apabila kita membeli sikat gigi, maka kita cendrung juga akan membeli pasta giginya. Pola-pola seperti ini akan sangat bermanfaat dalam industri retail seperti dalam hal penetapan diskon produk, promo, penjualan dalam bentuk paket, rekomendasi produk atau penentuan lokasi dari item produk. Association Rules bisa juga diterapkan dalam bidang kesehatan, misalnya untuk mendapatkan hubungan dan interaksi antar faktor resiko seseorang dengan kecenderungan penyakit yang muncul. Dalam bidang manufaktur dapat digunakan untuk mencari pila hubungan antara parameter-parameter proses produksi dengan potensi permasalahan kualitas produk, atau mencari pola-pola desain produk yang diinginkan oleh pelanggan sehingga dapat dijadikan dasar dalam mendesain sebuah produk.
Terdapat beberapa algoritma atau metode untuk menemukan rules, salah satu yang paling populer adalah Algoritma Apriori. Association rules atau aturan asosiasi yang dihasilkan nantinya akan memiliki bentuk sebagai berikut: \[A => B\]
Berdasarkan rumus di atas, A adalah antecedent atau pendahulu sedangkan B adalah consequent atau akibat. Cara membaca rumus di atas adalah jika seseorang membeli item A, maka ada kecenderungan dia juga akan membeli item B. Antecedent dapat berisi satu atau lebih item yang menjadi penanda bahwa ketika kita sudah tahu dia membeli item tersebut maka dia juga akan membeli item consequent. Bentuk hubungan ini tidak bersifat kausalitas atau sebab akibat, tetapi berbentuk co-occurence atau terjadi saling bersamaan.
Sebelum masuk ke dalam penjelasan tentang algoritme apriori, pertama kita harus mengetahui dahulu metrik atau tolak ukur yang digunakan dalam association rules, yang meliputi Support, Confidence, dan Lift.
Sebagai ilustrasi, kita akan menggunakan data buatan yang berisi 5 transaksi sebagai berikut:
df_dummy <- data.frame(transaction_id = 1:5,
items = c("soft drink, mineral water",
"soft drink",
"coffee, mineral water, lemon tea",
"bread, coffee, mineral water",
"coffee, mineral water"))
df_dummy
Support menunjukkan proporsi dari jumlah transaksi yang memiliki satu atau lebih item yang muncul secara bersamaan dibandingkan dengan jumlah transaksi secara keseluruhan. Rumus untuk menghitung Support dari suatu item adalah sebagai berikut:
\[Support(B) = \frac{Jumlah\ transaksi\ yang\ berisi\ item\ B }{Jumlah\ seluruh\ transaksi} = \frac{Freq(B)}{N}\]
Berdasarkan data transaksi sebelumnya, maka Support untuk item soft drink adalah sebagai berikut.
\[Support(soft\ drink) = \frac{2}{5} = 0.4\] Artinya 40% dari total transaksi mengandung item soft drink.
Jika itemnya lebih dari satu, maka rumusnya menjadi seperti berikut:
\[Support(A,B) = \frac{Jumlah\ transaksi\ yang\ berisi\ item\ A\ \&\ B }{Jumlah\ seluruh\ transaksi} = \frac{Freq(A \cup B)}{N}\] Berdasarkan data transaksi df_dummy sebelumnya, maka Support untuk item coffee dan mineral water adalah sebagai berikut.
\[Support(coffee, mineral\ water) = \frac{3}{5} = 0.6\] Artinya 60% dari total transaksi mengandung item coffee dan mineral water.
Jika Support hanya menunjukkan seberapa banyak proporsi sebuah item di seluruh transaksi, maka Confidence menunjukkan seberapa besar kemungkinan seseorang akan membeli item B jika terdapat item A, atau setara dengan berapa banyak jumlah transaksi yang memiliki item A dan item B diantara transaksi-transaksi yang memiliki item A. Rumus untuk menghitung Confidence adalah sebagai berikut:
\[Confidence(A => B) = \frac{Freq(A\ \cap\ B)}{Freq(A)}\] Berdasarkan data transaksi sebelumnya, maka Confidence untuk item coffee dan mineral water adalah sebagai berikut:
\[Confidence(mineral\ water => coffee) = \frac{3}{4} = 0.75\]
Confidence(mineral water => coffee) menunjukkan rules/aturan jika seseorang membeli mineral water, berapa kemungkinannya dia juga membeli coffee. Maka, kita perlu mencari ada berapa transaksi yang terdapat item mineral water dan coffee dan dibagi dengan seluruh transaksi yang di dalamnya terdapat mineral water. Dari total 5 transaksi yang ada, 4 di antaranya terdapat item mineral water dan dari 4 transaksi tersebut terdapat 3 transaksi yang memiliki coffee maupun mineral water, sehingga nilai Confidence(mineral water => coffee) adalah 3 dari 4 transaksi atau sama degan 75%. Maka, ketika seseorang membeli mineral water, kemungkinan seseorang membeli juga coffee adalah sekitar 75%.
Kelemahan dari Confidence adalah hanya mempertimbangkan seberapa banyak/populer item A saja (perhatikan bagian penyebut) dan tidak memperhatikan seberapa populer item B dalam seluruh transaksi. Perhatikan ilustrasi menggunakan diagram Venn berikut:
Berdasarkan gambar di atas, terdapat 80 transaksi yang berisi Milk dan 13 transaksi berisi Toothbrush. Selain itu, terdapat 10 transaksi di mana terdapat Milk dan Toothbrush. Jika kita memiliki rules bahwa Toothbrush => Milk, maka Confidence-nya adalah:
\[Confidence(Toothbrush => Milk) = \frac{10}{13} = 76.9\%\] Ketika seseorang membeli Toothbrush maka ada kemungkinan 76.9% dia juga akan membeli Milk. Sekilas mungkin masuk akal, tetapi bila diperhatikan, Milk memiliki jumlah transaksi yang besar dan hanya sedikit dari transaksi tersebut yang berkaitan dengan Toothbrush. Karena item Milk sangat populer, maka wajar jika transaksi konsumen yang membeli Toothbrush juga akan cenderung membeli Milk, sehingga meningkatkan nilai Confidence-nya. Solusi untuk mengatasi hal ini, terdapat satu metrik lagi yang menggunakan informasi dari antecedent dan precedent, yakni Lift yang akan dibahas di sub-bab berikutnya.
Lift, sesuai namanya, menunjukkan seberapa baik sebuah antecedent “mengangkat” atau meningkatkan peluang seseorang membeli item consequent. Jika Confidence hanya mengukur seberapa besar peluang untuk membeli item B jika diketahui item A dibeli, maka Lift mengukur seberapa besar pembelian item A meningkatkan peluang pembelian item B. Rumus untuk menghitung Lift adalah sebagai berikut:
\[Lift(A,B) = \frac{Support(A,B)}{Support(A)\ Support(B)}\] Berdasarkan data transaksi sebelumnya, maka Lift untuk item coffee dan mineral water adalah sebagai berikut.
Pertama, kita hitung terlebih dahulu nilai dari masing-masing Support yang dibutuhkan.
\[Support(mineral\ water, coffee) = \frac{3}{5} = 0.6\]
\[Support(mineral\ water) = \frac{4}{5} = 0.8\]
\[Support(coffee) = \frac{3}{5} = 0.6\]
Setelah mendapatkan semua nilai Support, kemudian masukkan nilai Support yang diperoleh ke dalam rumus untuk mendapatkan nilai Lift dari mineral water => coffee.
\[Lift(mineral\ water => coffee) = \frac{0.6}{0.6\ 0.8} = 1.25\]
Didapatkan nilai Lift(mineral water => coffee) = 1.25. Bagaimana cara menginterpretasikannya? Lift membandingkan peluang ketika keberadaan item satu menjadi sinyal kuat bahwa item lain juga akan dibeli dengan peluang bahwa keberadaan item satu dengan lainnya saling independen dan tidak berkaitan, sehingga:
Algoritma yang umum digunakan untuk membuat association rules adalah Apriori Algorithm. Berikut merupakan cara kerja Apriori secara umum:
knitr::include_graphics("image/flow.png")
Setelah mengetahui metrics yang digunakan dalam market basket analysis, serta cara kerja dari algoritme apriori. Perlu diingat bahwa struktur data input dalam algoritme Apriori harus berbentuk matrix. Setiap baris dalam matrix yang terbentuk merepresentasikan id transaksi dan kolom merepresentasikan barang yang dibeli.
knitr::include_graphics("image/matrix.png")
Gambar di atas merupakan ilustrasi jika data df_dummy diubah menjadi matrix. Matrix di atas disebut sebagai sparse matrix. Sparse Matrix merupakan matrix dengan elemen utamanya adalah nilai 0.
# data wrangling/data manipulation
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# read data format excel karena dataset yang digunakan format xlsx
library(readxl)
# Association Rules
library(arules)
## Loading required package: Matrix
##
## Attaching package: 'arules'
## The following object is masked from 'package:dplyr':
##
## recode
## The following objects are masked from 'package:base':
##
## abbreviate, write
# visualisasi
library(arulesViz)
## Loading required package: grid
## Registered S3 method overwritten by 'seriation':
## method from
## reorder.hclust gclus
# import dataset
retail <- read_excel("data/Online Retail.xlsx")
# lihat struktur dataset
glimpse(retail)
## Rows: 541,909
## Columns: 8
## $ InvoiceNo <chr> "536365", "536365", "536365", "536365", "536365", "5363...
## $ StockCode <chr> "85123A", "71053", "84406B", "84029G", "84029E", "22752...
## $ Description <chr> "WHITE HANGING HEART T-LIGHT HOLDER", "WHITE METAL LANT...
## $ Quantity <dbl> 6, 6, 8, 6, 6, 2, 6, 6, 6, 32, 6, 6, 8, 6, 6, 3, 2, 3, ...
## $ InvoiceDate <dttm> 2010-12-01 08:26:00, 2010-12-01 08:26:00, 2010-12-01 0...
## $ UnitPrice <dbl> 2.55, 3.39, 2.75, 3.39, 3.39, 7.65, 4.25, 1.85, 1.85, 1...
## $ CustomerID <dbl> 17850, 17850, 17850, 17850, 17850, 17850, 17850, 17850,...
## $ Country <chr> "United Kingdom", "United Kingdom", "United Kingdom", "...
# Lihat 6 baris teratas dari data
head(retail)
# melihat ringkasan dari data
summary (retail)
## InvoiceNo StockCode Description Quantity
## Length:541909 Length:541909 Length:541909 Min. :-80995.00
## Class :character Class :character Class :character 1st Qu.: 1.00
## Mode :character Mode :character Mode :character Median : 3.00
## Mean : 9.55
## 3rd Qu.: 10.00
## Max. : 80995.00
##
## InvoiceDate UnitPrice CustomerID
## Min. :2010-12-01 08:26:00 Min. :-11062.06 Min. :12346
## 1st Qu.:2011-03-28 11:34:00 1st Qu.: 1.25 1st Qu.:13953
## Median :2011-07-19 17:17:00 Median : 2.08 Median :15152
## Mean :2011-07-04 13:34:57 Mean : 4.61 Mean :15288
## 3rd Qu.:2011-10-19 11:27:00 3rd Qu.: 4.13 3rd Qu.:16791
## Max. :2011-12-09 12:50:00 Max. : 38970.00 Max. :18287
## NA's :135080
## Country
## Length:541909
## Class :character
## Mode :character
##
##
##
##
Bisa dilihat dari ringkasan data pada kolom Quantity terdapat barang terjual negatif, maka kita perlu melakukan beberapa pra proses dalam sebelum kita melakukan market basket analysis
Sekarang kita fokus pada kolom Quantity berapa banyak yang nilainya kurang dari 1
retail %>%
filter(Quantity < 1)
Hasil di atas menunjukkan bahwa terdapat 10 ribu baris yang memiliki Quantity kurang dari 1, Quantity kurang dari 0 memiliki arti barang tersebut terjual dalam kondisi diskon. Misal kita tidak ingin menggunakan data tersebut karena kita tidak ingin melihat pengaruh diskon pada rules yang terbentuk nanti.
Selain melakukan filtering terhadap data, kita juga perlu melakukan seleksi terhadap kolom apa saja yang akan digunakan. Pada MBA ini kita hanya akan menggunakan kolom InvoiceNo dan Description. Adapun untuk memilih 2 kolom tersebut bisa menggunakan fungsi select()
retail %>%
select(InvoiceNo, Description)
Proses filter dan select di atas belum disimpan ke dalam objek, selain itu kedua proses tersebut dapat digabungkan menjadi satu proses dengan bantuan %>% (piping)
retail_clean <- retail %>%
filter(Quantity > 0) %>%
select(InvoiceNo, Description)
head(retail_clean)
Hasil dari proses filtering dan selection disimpan pada objek retail_clean, objek inilah yang akan kita gunakan dalam proses analisis kedepannya.
Dalam proses ini ada beberapa hal yang harus dicari tahu terlebih dahulu, seperti :
# Barang apa yang paling sering dibeli oleh pelanggan
retail_clean %>%
count(Description, name = "freq", sort = TRUE)
Latihan: Lakukanlah aggregasi data untuk menjawab pertanyaan berapa banyak barang yang dibeli setiap transaksi ?
# your code
Sebelum kita membuat rules dari model association rules, kita harus mengelompokkan data berdasarkan InvoiceNo dengan menggunakan fungsi split() untuk mengatasi permasalahan komputasi dari sparse matrix karena dimensi data yang besar. Kita akan mengubah data retail menjadi list
retail_list <- split(retail_clean$Description, retail_clean$InvoiceNo)
head(retail_list, 3)
## $`536365`
## [1] "WHITE HANGING HEART T-LIGHT HOLDER" "WHITE METAL LANTERN"
## [3] "CREAM CUPID HEARTS COAT HANGER" "KNITTED UNION FLAG HOT WATER BOTTLE"
## [5] "RED WOOLLY HOTTIE WHITE HEART." "SET 7 BABUSHKA NESTING BOXES"
## [7] "GLASS STAR FROSTED T-LIGHT HOLDER"
##
## $`536366`
## [1] "HAND WARMER UNION JACK" "HAND WARMER RED POLKA DOT"
##
## $`536367`
## [1] "ASSORTED COLOUR BIRD ORNAMENT" "POPPY'S PLAYHOUSE BEDROOM"
## [3] "POPPY'S PLAYHOUSE KITCHEN" "FELTCRAFT PRINCESS CHARLOTTE DOLL"
## [5] "IVORY KNITTED MUG COSY" "BOX OF 6 ASSORTED COLOUR TEASPOONS"
## [7] "BOX OF VINTAGE JIGSAW BLOCKS" "BOX OF VINTAGE ALPHABET BLOCKS"
## [9] "HOME BUILDING BLOCK WORD" "LOVE BUILDING BLOCK WORD"
## [11] "RECIPE BOX WITH METAL HEART" "DOORMAT NEW ENGLAND"
Setelah mengubah data retail menjadi list, selanjutnya kita akan mengubah data list tersebut menjadi bertipe transaction dengan menggunakan fungsi as()
retail_transaction <- as(retail_list, "transactions")
## Warning in asMethod(object): removing duplicated items in transactions
retail_transaction %>%
head(3) %>%
inspect()
## items transactionID
## [1] {CREAM CUPID HEARTS COAT HANGER,
## GLASS STAR FROSTED T-LIGHT HOLDER,
## KNITTED UNION FLAG HOT WATER BOTTLE,
## RED WOOLLY HOTTIE WHITE HEART.,
## SET 7 BABUSHKA NESTING BOXES,
## WHITE HANGING HEART T-LIGHT HOLDER,
## WHITE METAL LANTERN} 536365
## [2] {HAND WARMER RED POLKA DOT,
## HAND WARMER UNION JACK} 536366
## [3] {ASSORTED COLOUR BIRD ORNAMENT,
## BOX OF 6 ASSORTED COLOUR TEASPOONS,
## BOX OF VINTAGE ALPHABET BLOCKS,
## BOX OF VINTAGE JIGSAW BLOCKS,
## DOORMAT NEW ENGLAND,
## FELTCRAFT PRINCESS CHARLOTTE DOLL,
## HOME BUILDING BLOCK WORD,
## IVORY KNITTED MUG COSY,
## LOVE BUILDING BLOCK WORD,
## POPPY'S PLAYHOUSE BEDROOM,
## POPPY'S PLAYHOUSE KITCHEN,
## RECIPE BOX WITH METAL HEART} 536367
Pada dasarnya, data transaction diperoleh dari sparse matrix yang disederhanakan
retail_transaction@data %>%
dim()
## [1] 4065 20728
Rules dari algoritme apriori bisa dihasilkan dengan fungsi apriori() dari package arules. Fungsi tersebut menerima beberapa parameter seperti : * data : data transaksi yang ingin digunakan * parameter : * supp : batas bawah (threshold) dari nilai Support * conf : batas bawah (threshold) dari nilai Confidence
Pada kasus ini, kita batasi minimum support-nya adalah 1% (0.01), artinya item atau kombinasi item harus ada minimal 1% transaksi dari total keseluruhan transaksi. Kita juga batasi rules yang akan ditampilkan hanya rules dengan minimal confidence sebesar 0.7.
retail_rules <- apriori(data = retail_transaction, parameter = list(supp = 0.01, conf = 0.7))
## Apriori
##
## Parameter specification:
## confidence minval smax arem aval originalSupport maxtime support minlen
## 0.7 0.1 1 none FALSE TRUE 5 0.01 1
## maxlen target ext
## 10 rules TRUE
##
## Algorithmic control:
## filter tree heap memopt load sort verbose
## 0.1 TRUE TRUE FALSE TRUE 2 TRUE
##
## Absolute minimum support count: 207
##
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[4065 item(s), 20728 transaction(s)] done [0.38s].
## sorting and recoding items ... [779 item(s)] done [0.02s].
## creating transaction tree ... done [0.02s].
## checking subsets of size 1 2 3 4 5 done [0.07s].
## writing ... [218 rule(s)] done [0.00s].
## creating S4 object ... done [0.01s].
Kita akan melihat rangkuman dari aturan asosiasi yang sudah dihasilkan
summary (retail_rules)
## set of 218 rules
##
## rule length distribution (lhs + rhs):sizes
## 2 3 4
## 54 132 32
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.000 3.000 3.000 2.899 3.000 4.000
##
## summary of quality measures:
## support confidence coverage lift
## Min. :0.01003 Min. :0.7000 Min. :0.01052 Min. : 6.499
## 1st Qu.:0.01057 1st Qu.:0.7371 1st Qu.:0.01356 1st Qu.: 8.379
## Median :0.01172 Median :0.7702 Median :0.01510 Median :16.316
## Mean :0.01296 Mean :0.7845 Mean :0.01666 Mean :22.814
## 3rd Qu.:0.01354 3rd Qu.:0.8263 3rd Qu.:0.01821 3rd Qu.:25.542
## Max. :0.03705 Max. :0.9587 Max. :0.05143 Max. :80.536
## count
## Min. :208.0
## 1st Qu.:219.0
## Median :243.0
## Mean :268.7
## 3rd Qu.:280.8
## Max. :768.0
##
## mining info:
## data ntransactions support confidence
## retail_transaction 20728 0.01 0.7
Berdasarkan keluaran hasil di atas diketahui bahwa rules yang dihasilkan sebanyak 218 rules, di mana rules terpanjang terdiri dari 4 item dengan jumlah rules sebanyak 32. Selain itu, kita bisa mengetahui nilai statistik dari support, confidence, coverage serta lift.
Fungsi apriori di atas menghasilkan 218 rules, kita bisa menampilkan beberapa rules saja berdasarkan kriteria yang kita pilih. Bila ingin melihat 5 rules teratas berdasarkan nilai confidence tertinggi dapat menggunakan kode di bawah ini:
rules_conf <- head(retail_rules, 5, by = "confidence")
inspect(rules_conf)
## lhs rhs support confidence coverage lift count
## [1] {JAM MAKING SET PRINTED,
## SUKI SHOULDER BAG} => {DOTCOM POSTAGE} 0.01008298 0.9587156 0.01051717 28.06816 209
## [2] {REGENCY TEA PLATE PINK,
## REGENCY TEA PLATE ROSES} => {REGENCY TEA PLATE GREEN} 0.01230220 0.9479554 0.01297761 51.57275 255
## [3] {HERB MARKER THYME} => {HERB MARKER ROSEMARY} 0.01066191 0.9324895 0.01143381 80.53601 221
## [4] {WOODEN HEART CHRISTMAS SCANDINAVIAN,
## WOODEN TREE CHRISTMAS SCANDINAVIAN} => {WOODEN STAR CHRISTMAS SCANDINAVIAN} 0.01114435 0.9277108 0.01201274 37.55779 231
## [5] {HERB MARKER ROSEMARY} => {HERB MARKER THYME} 0.01066191 0.9208333 0.01157854 80.53601 221
Nilai Confidence yang tinggi menunjukkan seberapa besar peluang membeli item lainnya jika kita telah membeli suatu item. Rules dengan Confidence tertinggi adalah {jam making set printed, suki shoulder bag} => {dotcom postage}, artinya ketika seorang pelanggan membeli 2 item tersebut, kemungkinan besar pelanggan juga akan membeli dotcom postage karena dari seluruh transaksi yang berisi 2 item pertama yang dibeli, 0.958 atau 95.8% pembelian juga terdapat item dotcom postage.
Kelemahan apabila melihat rules berdasarkan nilai Confidence adalah, Confidence hanya melihat dari transaksi antecedent dan tidak memperhatikan transaksi-transaksi lain dari consequent. Maka, kita perlu melihat seberapa baik antecedent meningkatkan peluang untuk pelanggan membeli item lainnya jika kita mengetahui dia telah membeli sekumpulan barang-barang tertentu dibandingkan ketika kita tidak tahu bahwa pelanggan membeli barang-barang tersebut. Oleh sebab itu, mari kita periksa 5 rules dengan Lift tertinggi.
rules_lift <- head(retail_rules, n = 10, by = "lift")
inspect(rules_lift)
## lhs rhs support confidence
## [1] {HERB MARKER THYME} => {HERB MARKER ROSEMARY} 0.01066191 0.9324895
## [2] {HERB MARKER ROSEMARY} => {HERB MARKER THYME} 0.01066191 0.9208333
## [3] {HERB MARKER THYME} => {HERB MARKER PARSLEY} 0.01027596 0.8987342
## [4] {HERB MARKER PARSLEY} => {HERB MARKER THYME} 0.01027596 0.8949580
## [5] {HERB MARKER PARSLEY} => {HERB MARKER ROSEMARY} 0.01037244 0.9033613
## [6] {HERB MARKER ROSEMARY} => {HERB MARKER PARSLEY} 0.01037244 0.8958333
## [7] {HERB MARKER MINT} => {HERB MARKER PARSLEY} 0.01022771 0.8833333
## [8] {HERB MARKER PARSLEY} => {HERB MARKER MINT} 0.01022771 0.8907563
## [9] {HERB MARKER BASIL} => {HERB MARKER ROSEMARY} 0.01032420 0.8842975
## [10] {HERB MARKER ROSEMARY} => {HERB MARKER BASIL} 0.01032420 0.8916667
## coverage lift count
## [1] 0.01143381 80.53601 221
## [2] 0.01157854 80.53601 221
## [3] 0.01143381 78.27295 213
## [4] 0.01148205 78.27295 213
## [5] 0.01148205 78.02031 215
## [6] 0.01157854 78.02031 215
## [7] 0.01157854 76.93165 212
## [8] 0.01148205 76.93165 212
## [9] 0.01167503 76.37383 214
## [10] 0.01157854 76.37383 214
Berdasarkan hasil di atas, rules {herb marker thyme} => {herb marker rosemary} memiliki Lift terbesar dengan nilai 80. Ketika nilai Lift lebih besar dari 1, maka pembelian herb marker thyme memang meningkatkan peluang pembeli untuk membeli herb marker rosemary. Jika kita bandingkan, rules dengan Confidence tertinggi, yakni {jam making set printed, suki shoulder bag} => {dotcom postage} ternyata hanya memiliki Lift sebesar 28. Meskipun pembelian kedua item tersebut meningkatkan peluang untuk membeli dotcom postage, tetapi efeknya tidak terlalu besar jika dibandingkan dengan rules lainnya.
Visualisasi digunakan untuk mempermudah pemahaman terhadap rules yang sudah dibuat. Untuk memvisualisasikan rules yang sudah terbentuk kita dapat menggunakan fungsi plotly_arules() dari packages arulesViz
plotly_arules(retail_rules)
## Warning: 'plotly_arules' is deprecated.
## Use 'plot' instead.
## See help("Deprecated")
## To reduce overplotting, jitter is added! Use jitter = 0 to prevent jitter.
Berdasarkan 218 rules yang dihasilkan, hanya terdapat beberapa rules yang memiliki Confidence dan Lift yang tinggi, sementara sebagian besar rules hanya memiliki Lift tinggi atau Confidence tinggi saja. Sedangkan, dari semua rules yang dihasilkan, tidak terdapat rules yang memilki Lift kurang dari 1, sehingga dapat disimpulkan bahwa semua rules yang dihasilkan dapat meningkatkan peluang untuk pembelian item tertentu,
Dari rules yang dihasilkan dapat dilihat juga hubungan antar rules dengan menggunakan graph atau plot(), dengan tiap lingkaran atau titik adalah rules dan panah sebagai hubungan antara rules dengan item barangnya.
plot(retail_rules,
method = "graph",
measure = "lift",
engine = "htmlwidget" # membuat grafik interaktif
)
## Warning: Too many rules supplied. Only plotting the best 100 rules using lift
## (change control parameter max if needed)
Pada grafik yang dihasilkan di atas, terdapat beberapa cluster atau kelompok rules yang saling berinteraksi satu sama lain. Salah satu yang terbesar adalah cluster yang berisi charlotte bag yang saling terhubung. Cluster lainnya yang berisi banyak rules yang saling terkoneksi adalah clusterherb marker.
Kita ambil contoh cluster charlotte bag, yang hanya terdiri dari 5 item/produk, yakni woodland charlotte bag, strawberry charlotte bag, red retrospot charlotte bag, charlotte bag pink polkadot, charlotte bag suki design. Berdasarkan interaksi 5 item tersebut, dihasilkan puluhan rules/aturan yang berbeda. Apabila diperhatikan ke 5 item tersebut saling terhubung, maka hal ini menunjukkan adanya hubungan keterkaitan antara rules satu dengan lainnya. Oleh karena kita meyakini adanya hubungan keterkaitan yang kuat antara item satu dengan lainnya di dalam cluster tersebut, maka kita bisa membuat sebuah promo dalam bentuk **Bundle Package*; yakni paket lengkap yang berisi 5 item tersebut.